package com.seleniti.enpareja.android.control.controller;

import org.ioc.commons.flowcontrol.activitymapper.IsActivityManager;
import org.ioc.commons.impl.android.flowcontrol.eventbus.AndroidEventBusImpl;
import org.ioc.commons.impl.android.flowcontrol.operationmanager.AndroidOperationManagerImpl;

import android.app.Activity;
import android.content.Context;
import android.view.HasContext;

import com.seleniti.enpareja.android.AppShellActivity;
import com.seleniti.enpareja.android.control.factory.ClientFactoryImpl;
import com.seleniti.enpareja.controller.common.GlobalData;
import com.seleniti.enpareja.controller.common.domain.UserAgent;
import com.seleniti.enpareja.controller.control.controller.EnParejaAppControllerImpl;
import com.seleniti.enpareja.controller.control.factory.EnParejaAppController;

public class AndroidEnParejaAppControllerImpl extends EnParejaAppControllerImpl implements HasContext {

	/**
	 * <ul>
	 * <li>TODO: Resto de pantallas movil</li>
	 * <li>TODO: Alarmas y Notificaciones (descongelar, hacer tarea de casa, tu
	 * pareja cambió algo...) TAMBIÉN EN LA VERSIÓN 4.1</li>
	 * <li>TODO: Resto de pantallas web/movil</li>
	 * <li>TODO: Recetas</li>
	 * <li>TODO: Tip indicando que si haces clic en "No queda / Tenemos" se
	 * filtra. Lo mismo para pendiente.
	 * <li>TODO: Recuperar contraseña</li>
	 * <li>TODO: Que NO salgan todos los usuarios</li>
	 * <li>FIXME: El cargando al girar la pantalla se mantiene</li>
	 * <li>TODO: Que se manden emails a tu pareja para solicitar el
	 * emparejamiento</li>
	 * <li>TODO: Validar el email de un nuevo usuario registrado</li>
	 * <li>TODO: Separar el MessageBoxFactory de EnPareja a genérico</li>
	 * <li>TODO: Acerca de / Contacto</li>
	 * <li>TODO: Turnos: Multiasignación en un Calendario</li>
	 * <li>TODO: Publicidad (¿módulo común para reutilizar en Grupit?)</li>
	 * <li>TODO: Logarse como Whatsapp: Sin usuario</li>
	 * <li>TODO: Emparejarse elegiendo usuario desde la lista de contactos del
	 * móvil como Whatsapp</li>
	 * 
	 * <li>TODO: LocalStorage de los elementos de una lista por si no hay
	 * conexión</li>
	 * <li>TODO: Aviso cookies</li>
	 * <li>TODO: Secciones en shopping list</li>
	 * <li>TODO: Buscar elementos en Shopping List</li>
	 * 
	 * <li>TODO: Quitar el resto de TODOs repartidos por el código</li>
	 * <li>TODO: Arrastrar en ShoppingList los elementos con el dedo izquierda-derecha</li>
	 * <li>TODO: Mejorar estilo en versión móvil</li>
	 */

	private final Context context;

	public AndroidEnParejaAppControllerImpl(Context context, ClientFactoryImpl clientFactory) {
		super(clientFactory);
		this.context = context;
		this.eventBus = new AndroidEventBusImpl<EnParejaAppController.Event>(this.context, true);
		this.operationManager = new AndroidOperationManagerImpl<EnParejaAppController.Operation>(this.context,
				true);
	}

	@Override
	protected void initGlobalDataProviders() {
		super.initGlobalDataProviders();

		this.globalDataController.setGlobalDataConstantValue(GlobalData.UserAgent, UserAgent.ANDROID_APP);
	}

	@Override
	protected Object getGlobalProviderCaller() {
		return clientFactory.getShell();
	}

	@Override
	public void reload() {
		((Activity)clientFactory.getShell()).recreate();
	}

	@Override
	public Context getContext() {
		return this.context;
	}

	@Override
	public IsActivityManager getActivityManager() {
		return ((AppShellActivity)clientFactory.getShell());
	}
	
}
